package com.card.user;

import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.card.mail.GlobMail;
import com.card.mail.MailManager;
import com.google.common.collect.Lists;
import com.xiaoao.net.json.message.JsonMessage;

/**
 * 用户邮件系统管理
 * 
 * @author xiaoaogame
 *
 */
public class UserMail extends UserDataComponent {
	// 已激活的邮件
	private Map<String, MailItem> receveIds;
	// 删除的所有邮件
	private Set<String> removeIds;
	//用户个人所拥有的邮件（每个人拥有的不一样，比如升级奖励邮件）
	private List<GlobMail> personalMails = Lists.newArrayList();

	class MailItem {
		// 邮件id
		protected String mailId;
		protected Date date;
		// 是否已领取
		protected boolean isReward;

		public MailItem(String id) {
			this.mailId = id;
			this.date = new Date();
		}

		public void setReward() {
			this.isReward = true;
			this.date = new Date();
		}
	}

	@Override
	public void LateInit(UserBase context) {
		super.LateInit(context);
		if (receveIds == null)
			receveIds = new HashMap<>();
		if (removeIds == null)
			removeIds = new HashSet<>();
//		if(personalMails == null){
//			personalMails = new HashMap<>();
//		}
//		for(GlobMail gb:personalMails.values()){
//			gb.initRewardList(gb.getRewardStr());
//		}
	}

	/*
	 * 检测玩家个人的邮件系统
	 * 
	 */
	public void checkUserMail() {
		// 获取服务端所有推送的邮件
		List<GlobMail> dayMailList = MailManager.getInstance().getCurMail();
		for (GlobMail gb : dayMailList) {
			if (!receveIds.containsKey(gb.getMailId())
					&&!removeIds.contains(gb.getMailId())) {
				addReceveMail(gb);
				SetChanged();
			}
		}
		// 检测是否有需要删除邮件，并删除
//		Iterator<Entry<String, MailItem>> iter = receveIds.entrySet().iterator();
//		removeIds.clear();
//		while (iter.hasNext()) {
//			Entry<String, MailItem> entry = iter.next();
//			MailItem item = entry.getValue();
//			Date enDate;
//			if (item.isReward) {// 已领取
//				enDate = TimeUtils.addMinute(item.date, 24 * 60);
//			} else {
//				enDate = TimeUtils.addMinute(item.date, 72 * 60);
//			}
//			if (new Date().after(enDate)) {
//				removeIds.add(entry.getKey());
//			}
//		}
		
		//检测客户已经删除邮件序列，如果服务器端也已删除，对客户端也彻底移除
//		Iterator<String> it = removeIds.iterator();
//		while (it.hasNext()) {
//			String id = it.next();
//			GlobMail cuMail = personalMails.get(id);
//			if(cuMail != null){//删除的私人邮件
//				personalMails.remove(cuMail);
//				receveIds.remove(id);
//				it.remove();
//			}else 
//			if(MailManager.getInstance().getMailMap(id) == null){
//				receveIds.remove(id);
//				it.remove();
//			}
//		}
	}

	/*
	 * 领取邮件奖励
	 * 
	 * @param mailId
	 */
//	public boolean postHolen(String mailId) {
//		GlobMail globMail = MailManager.getInstance().getMailMap(mailId);
//		GlobMail cuGlobMail = personalMails.get(mailId);
//		if(globMail != null){//
//			globMail.giveItems(Context());// 赋予奖励
//			addReceveMail(globMail);
//			receveIds.get(mailId).setReward();
//			SetChanged();
//			return true;
//		}else if(cuGlobMail != null){
//			cuGlobMail.giveItems(Context());// 赋予奖励
//			addReceveMail(cuGlobMail);
//			receveIds.get(mailId).setReward();
//			SetChanged();
//			return true;
//		}
//		return false;
//	}

	/**
	 * 添加激活邮件
	 * @param gb
	 */
	public void addReceveMail(GlobMail gb) {
		receveIds.put(gb.getMailId(), new MailItem(gb.getMailId()));
	}
	
	/**
	 * 添加个人邮件
	 * @param gb
	 */
	public void addPersonalMails(GlobMail gb){
		personalMails.add(gb);
		SetChanged();
	}
	
	public void removeMail(String mailId) {
		receveIds.remove(mailId);
		removeIds.add(mailId);
		SetChanged();
	}
	
	public void fillMsg(JsonMessage message) {
//		List<GlobMail> rewardList = Lists.newArrayList();
		List<GlobMail> mialList = Lists.newArrayList();
		Iterator<Entry<String, MailItem>> iter = receveIds.entrySet().iterator();
		while (iter.hasNext()) {
			Entry<String, MailItem> entry = iter.next();
			String mailId = entry.getValue().mailId;
			GlobMail mail = MailManager.getInstance().getMailMap(mailId);
			if(mail != null) {
				mialList.add(mail);
			}
		}
//		message.addProperty("rewardMails", rewardList);
		message.addProperty("mails", mialList);
	}
}
